﻿using System;
using System.Collections.Generic;
using System.Web.Mvc;
using log4net;
using TheBullysStore.Models;
using TheBullysStore.Models.ModuloAdministracion.Departamento;
using TheBullysStore.Models.ModuloAdministracion.Edificio;
using TheBullysStore.Models.ModuloAdministracion.TipoDepartamento;

namespace TheBullysStore.Controllers.ModuloAdministracion.Departamento
{
    public class DepartamentoController : Controller
    {
        //
        // GET: /Departamento/

        private static ILog log = LogManager.GetLogger(typeof(DepartamentoController));
        private TheBullysStoreDB db = new TheBullysStoreDB();
        DepartamentoFacade departamentoFacade = new DepartamentoFacade();
        EdificioFacade edificioFacade = new EdificioFacade();
        TipoDepartamentoFacade tipodepartamentoFacade = new TipoDepartamentoFacade();


        public ActionResult Index()
        {
            return View();
        }

        public ActionResult Departamento()
        {
            return View();
        }

        public ActionResult RegistrarDepartamento()
        {
            return View();
        }

        public ActionResult BuscarDepartamento()
        {
            return View();
        }

        [HttpPost]
        public JsonResult cargarEdificios(EdificioBean edificio)
        {
            try
            {
                List<EdificioBean> listaEdificio = edificioFacade.Listaredificio(edificio);
                return Json(new { listaEdificio });
            }
            catch (Exception ex)
            {
                log.Error("CargarEdificios - GET(EXCEPTION):", ex);
                return Json(new { listaEdificio = "Ocurrió un error al cargar los Edificios" });
            }

        }

        [HttpPost]
        public JsonResult cargarPisos(EdificioBean edificio)
        {
            try
            {
                List<int> listaPiso = edificioFacade.Listarpiso(edificio);
                return Json(new { listaPiso });
            }
            catch (Exception ex)
            {
                log.Error("CargarPisos - GET(EXCEPTION):", ex);
                return Json(new { listaPiso = "Ocurrió un error al cargar los Pisos" });
            }
        }

        [HttpPost]
        public JsonResult cargarTiposDepartamento(TipoDepartamentoBean tipodepartamento)
        {
            try
            {
                List<TipoDepartamentoBean> listaTipoDepartamento = tipodepartamentoFacade.Listartipodepartamento(tipodepartamento);
                return Json(new { listaTipoDepartamento });
            }
            catch (Exception ex)
            {
                log.Error("CargarTiposDepartamento - GET(EXCEPTION):", ex);
                return Json(new { listaTipoDepartamento = "Ocurrió un error al cargar los Tipos de Departamento" });
            } 
        }

        [HttpPost]
        public JsonResult registrarDepartamento(DepartamentoBean departamento)
        {
            try
            {
                if (departamentoFacade.Existedepartamento(departamento))
                {
                    log.Warn("El departamento: \"" + departamento.Numero + "\" del edificio " + departamento.NombreEdificio + " ya ha sido creado");
                    return Json(new { me = "El departamento ya existe" });        
                }

                string conexion = departamentoFacade.Registrardepartamento(departamento);

                if (conexion == "Bien")
                {
                    return Json(new { me = "Se ingreso correctamente el departamento " + departamento.Numero });
                }
                else
                {
                    return Json(new { me = conexion });
                }
            }
            catch (Exception ex)
            {
                log.Error("Registrar Departamento - GET(EXCEPTION):", ex);
                return Json(new { me = "Ocurrió un error al registrar" });
            } 
        }

        [HttpPost]
        public JsonResult buscarDepartamento(DepartamentoBean departamento)
        {
            try
            {
                List<DepartamentoBean> listaDepartamento = departamentoFacade.Listardepartamento(departamento);
                return Json(new { listaDepartamento });
            }
            catch (Exception ex)
            {
                log.Error("Buscar Departamento - GET(EXCEPTION):", ex);
                return Json(new { listaDepartamento = "Ocurrió un error al buscar" });
            }
        }

        [HttpPost]
        public JsonResult eliminarDepartamento(DepartamentoBean departamento)
        {
            try
            {
                string conexion = departamentoFacade.Eliminardepartamento(departamento);

                return Json(new { me = "Se eliminó correctamente el departamento " + departamento.Numero + "del Edificio " + departamento.NombreEdificio });
            }
            catch (Exception ex)
            {
                log.Error("Eliminar Departamento - GET(EXCEPTION):", ex);
                return Json(new { me = "Ocurrió un error al eliminar" });
            }
        }

        [HttpPost]
        public JsonResult modificarDepartamento(DepartamentoBean departamento)
        {
            try
            {
                string conexion = departamentoFacade.Modificardepartamento(departamento);

                if (conexion == "Bien")
                {
                    return Json(new { me = "Se modificó correctamente el departamento " + departamento.Numero + "del Edificio " + departamento.NombreEdificio });
                }
                else
                {
                    return Json(new { me = conexion });
                }
            }
            catch (Exception ex)
            {
                log.Error("Modificar Departamento - GET(EXCEPTION):", ex);
                return Json(new { me = "Ocurrió un error al modificar" });
            } 
        }

    }
}
